1. 题目描述(简单难度)
[success] 563. 二叉树的坡度
2. 解法一: 栈
解题思路: 从问题的描述中,可以清楚地了解到,我们需要在给定树的每个结点处找到其坡度,并将所有的坡度相加以获得最终结果。要找出任意结点的坡度,我们需要求出该结点的左子树上所有结点和以及其右子树上全部结点和的差值。
因此,为了找出解决方案,我们使用递归函数 traverse,在任何结点调用该函数,都会返回当前结点下面(包括其自身)的结点和。借助于任何结点的左右子结点的这一和值,我们可以直接获得该结点所对应的坡度。
class Solution {
int res = 0;
public int findTilt(TreeNode root) {
preOrder(root);
return res;
}
public int preOrder(TreeNode root) {
if (root == null) {
return 0;
}
int left = preOrder(root.left);
int right = preOrder(root.right);
res = res + Math.abs(left-right);
return left + right + root.val;
}
}